package studia.figlewicz.math.test;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Set;

import studia.figlewicz.math.library.*;

public class TEST_KrzywaStopyProcentowej {
	
	public static Konwencja konw = new Konwencja();
	public static Date dataNotowania = new Date(101,0,1);
	
	public static void main(String[] args) {
		
		
		konw = Utils.getStandardKonwencja();
		
		System.out.println(dataNotowania);
		
		IRS_test(dataNotowania,konw,0);
		ShortRate_test(dataNotowania,konw,1);

		
	}
	public static KrzywaStopyProcentowej IRS_test() {
		return IRS_test(dataNotowania,konw,0);
	}
	public static KrzywaStopyProcentowej IRS_test(Date dataNotowania, Konwencja konw, int czyWypisacWyniki) {

		NotowanieIRS IRS1 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(1,0,0,0),dataNotowania,4,konw);
		NotowanieIRS IRS2 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(2,0,0,0),dataNotowania,4.05,konw);
		NotowanieIRS IRS3 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,1,0,0),dataNotowania,4.1,konw);
		NotowanieIRS IRS4 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,1,0),dataNotowania,4.3,konw);
		NotowanieIRS IRS5 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,6,0),dataNotowania,4.5,konw);
		NotowanieIRS IRS6 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,1),dataNotowania,4.6,konw);
		NotowanieIRS IRS7 = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,2),dataNotowania,4.65,konw);
		
		if (czyWypisacWyniki == 1) {
			System.out.println(IRS1.getStopa()+"___"+IRS1.getKoniec());
			System.out.println(IRS2.getStopa()+"___"+IRS2.getKoniec());
			System.out.println(IRS3.getStopa()+"___"+IRS3.getKoniec());
			System.out.println(IRS4.getStopa()+"___"+IRS4.getKoniec());
			System.out.println(IRS5.getStopa()+"___"+IRS5.getKoniec());
			System.out.println(IRS6.getStopa()+"___"+IRS6.getKoniec());
			System.out.println(IRS7.getStopa()+"___"+IRS7.getKoniec());
		}
		
		KrzywaStopyProcentowej krzywa = new KrzywaStopyProcentowej();
		krzywa.dodajKontrakt(IRS1);
		krzywa.dodajKontrakt(IRS2);
		krzywa.dodajKontrakt(IRS3);
		krzywa.dodajKontrakt(IRS4);
		krzywa.dodajKontrakt(IRS5);
		krzywa.dodajKontrakt(IRS6);
		krzywa.dodajKontrakt(IRS7);
		return krzywa;
	}
	public static KrzywaStopyProcentowej ShortRate_test() {
		return ShortRate_test(dataNotowania,konw,0);
	}
	public static KrzywaStopyProcentowej ShortRate_test(Date dataNotowania, Konwencja konw, int czyWypisacWyniki) {
		Konwencja konwencjaShortRate = Utils.getStandardKonwencja();
		Konwencja konwencjaIRS = Utils.getStandardKonwencja();
		KontraktNaStopeProcentowa short1D = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(1,0,0,0),dataNotowania,99.99,konwencjaShortRate);
		KontraktNaStopeProcentowa short2D = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(2,0,0,0),dataNotowania,99.98,konwencjaShortRate);
		KontraktNaStopeProcentowa short1W = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,1,0,0),dataNotowania,99.90,konwencjaShortRate);
		KontraktNaStopeProcentowa short1M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,1,0),dataNotowania,99.55,konwencjaShortRate);
		KontraktNaStopeProcentowa short3M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,3,0),dataNotowania,98.15,konwencjaShortRate);
		KontraktNaStopeProcentowa short6M = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,6,0),dataNotowania,97,konwencjaShortRate);
		KontraktNaStopeProcentowa IRS1Y = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,1),dataNotowania,6.15,konwencjaIRS);
		KontraktNaStopeProcentowa IRS2Y = new NotowanieIRS(new Termin(0,0,0,0), new Termin(0,0,0,2),dataNotowania,6.20,konwencjaIRS);
		KrzywaStopyProcentowej krzywa = new KrzywaStopyProcentowej();
		krzywa.dodajKontrakt(short1D);
		krzywa.dodajKontrakt(short2D);
		krzywa.dodajKontrakt(short1W);
		krzywa.dodajKontrakt(short1M);
		krzywa.dodajKontrakt(short3M);
		krzywa.dodajKontrakt(short6M);
		krzywa.dodajKontrakt(IRS1Y);
		krzywa.dodajKontrakt(IRS2Y);
		if (czyWypisacWyniki == 1) {
			System.out.println("kontrakty:");
//			System.out.println("stopa r:__"+Short1.getStopa()+"__data:__"+Short1.getKoniec());
//			System.out.println("stopa r:__"+Short2.getStopa()+"__data:__"+Short2.getKoniec());
//			System.out.println("stopa r:__"+Short3.getStopa()+"__data:__"+Short3.getKoniec());
//			System.out.println("stopa r:__"+Short4.getStopa()+"__data:__"+Short4.getKoniec());
//			System.out.println("stopa r:__"+Short5.getStopa()+"__data:__"+Short5.getKoniec());
//			System.out.println("stopa r:__"+Short6.getStopa()+"__data:__"+Short6.getKoniec());
//			System.out.println("stopa r:__"+Short7.getStopa()+"__data:__"+Short7.getKoniec());
		}
		return krzywa;
	}
	
//	public static policz() {
//		
//		if (czyWypisacWyniki == 1) {
//			System.out.println("\nkrzywa:");
//			System.out.println("poczatek:__"+krzywa.getPoczatek()+"__koniec:__"+krzywa.getKoniec());
//			System.out.println("liczba punktow:__"+krzywa.getPunkty().size());
//			
//			int i = 1;
//			for (Date data : krzywa.getPunkty().keySet()) {
//				System.out.println("punkt:_"+i+"__"+data+"__wartosc:__"+krzywa.getPunkty().get(data));
//				i++;
//			}
//
//		}
//		
//
//		return krzywa;
//		
//		
//		System.out.println("\n\n\nUtils.get2Sasiednie:");
//		Date sdate = Short4.getKoniec();
//		System.out.println("data:__"+sdate);
//		LinkedHashMap<Date, Double> punkty = krzywa.getPunkty();
//		Set<Date> datySasiednie = Utils.get2Sasiednie(punkty.keySet(), sdate);
//		LinkedHashMap<Date, Double> punktySasiednie = new LinkedHashMap<Date, Double>();
//		for (Date d : datySasiednie) {
//			punktySasiednie.put(d,punkty.get(d));
//			System.out.println("_____sasiad:__"+d);
//		}
//		
//		Double wynik1 = Utils.wartoscWygladzona(punktySasiednie, sdate, MetodaInterpolacji.LINIOWA);
//		System.out.println("_____wartosc wygladzona:__"+wynik1);
//
//		
//		
//		
//		
//		NotowanieShortRate Short = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,3,0),dataNotowania,95,konw);
//		sdate = Short.getKoniec();
//		System.out.println("data:__"+sdate);
//		punkty = krzywa.getPunkty();
//		datySasiednie = Utils.get2Sasiednie(punkty.keySet(), sdate);
//		punktySasiednie = new LinkedHashMap<Date, Double>();
//		for (Date d : datySasiednie) {
//			punktySasiednie.put(d,punkty.get(d));
//			System.out.println("_____sasiad:__"+d);
//		}
//		Double wynik2 = Utils.wartoscWygladzona(punktySasiednie, sdate, MetodaInterpolacji.LINIOWA);
//		System.out.println("_____wartosc wygladzona:__"+wynik2);
//		
//		
//		
//		
//		
//		Short = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(9,9,9,9),dataNotowania,95,konw);
//		sdate = Short.getKoniec();
//		System.out.println("data:__"+sdate);
//		punkty = krzywa.getPunkty();
//		datySasiednie = Utils.get2Sasiednie(punkty.keySet(), sdate);
//		punktySasiednie = new LinkedHashMap<Date, Double>();
//		for (Date d : datySasiednie) {
//			punktySasiednie.put(d,punkty.get(d));
//			System.out.println("_____sasiad:__"+d);
//		}
//		Double wynik3 = Utils.wartoscWygladzona(punktySasiednie, sdate, MetodaInterpolacji.LINIOWA);
//		System.out.println("_____wartosc wygladzona:__"+wynik3);
//		
//		
//		
//		
//		
//		
//		
//		
//		Short = new NotowanieShortRate(new Termin(0,0,0,0), new Termin(0,0,-2,0),dataNotowania,95,konw);
//		sdate = Short.getKoniec();
//		System.out.println("data:__"+sdate);
//		punkty = krzywa.getPunkty();
//		datySasiednie = Utils.get2Sasiednie(punkty.keySet(), sdate);
//		punktySasiednie = new LinkedHashMap<Date, Double>();
//		for (Date d : datySasiednie) {
//			punktySasiednie.put(d,punkty.get(d));
//			System.out.println("_____sasiad:__"+d);
//		}
//		Double wynik4 = Utils.wartoscWygladzona(punktySasiednie, sdate, MetodaInterpolacji.LINIOWA);
//		System.out.println("_____wartosc wygladzona:__"+wynik4);
//		
//	}
	
}
